#pragma once

#include "PythonImportCacheItem.h"

namespace CHDB {

struct NumpyMaCacheItem : public PythonImportCacheItem
{
public:
	NumpyMaCacheItem(PythonImportCacheItem * parent)
		: PythonImportCacheItem("ma", parent), masked("masked", this), masked_array("masked_array", this) {
	}
	~NumpyMaCacheItem() override = default;

	PythonImportCacheItem masked;
	PythonImportCacheItem masked_array;
};

struct NumpyCacheItem : public PythonImportCacheItem
{
public:
	static constexpr const char * Name = "numpy";

	NumpyCacheItem()
		: PythonImportCacheItem("numpy"), ma(this), ndarray("ndarray", this), datetime64("datetime64", this),
			generic("generic", this), int64("int64", this), bool_("bool_", this), byte("byte", this),
			ubyte("ubyte", this), short_("short", this), ushort_("ushort", this), intc("intc", this),
			uintc("uintc", this), int_("int_", this), uint("uint", this), longlong("longlong", this),
			ulonglong("ulonglong", this), half("half", this), float16("float16", this), single("single", this),
			longdouble("longdouble", this), csingle("csingle", this), cdouble("cdouble", this),
			clongdouble("clongdouble", this) {
	}
	~NumpyCacheItem() override = default;

	NumpyMaCacheItem ma;
	PythonImportCacheItem ndarray;
	PythonImportCacheItem datetime64;
	PythonImportCacheItem generic;
	PythonImportCacheItem int64;
	PythonImportCacheItem bool_;
	PythonImportCacheItem byte;
	PythonImportCacheItem ubyte;
	PythonImportCacheItem short_;
	PythonImportCacheItem ushort_;
	PythonImportCacheItem intc;
	PythonImportCacheItem uintc;
	PythonImportCacheItem int_;
	PythonImportCacheItem uint;
	PythonImportCacheItem longlong;
	PythonImportCacheItem ulonglong;
	PythonImportCacheItem half;
	PythonImportCacheItem float16;
	PythonImportCacheItem single;
	PythonImportCacheItem longdouble;
	PythonImportCacheItem csingle;
	PythonImportCacheItem cdouble;
	PythonImportCacheItem clongdouble;

protected:
	bool IsRequired() const override final
	{
		return false;
	}
};

} // namespace CHDB
